import type { TablePaginationConfig } from 'ant-design-vue'
import type { ColumnType as IColumnType } from 'ant-design-vue/lib/table'
import type { FixedType, CellEllipsisType, DataIndex } from 'ant-design-vue/es/vc-table/interface'
import type { Rule } from 'ant-design-vue/es/form'

export interface IContentSearch {
  /**每份占几行 */
  colSpan: number
  /**是否需要重置 */
  isReset: boolean
  /**是否需要搜索 */
  isSearch: boolean
  /**是否开启回车搜索 */
  isEnter?: boolean
  /**表单rules */
  rules?: Record<string, Rule[]>
  /**表单排列 */
  layout?: 'horizontal' | 'vertical' | 'inline'
  /**搜索盒子配置项 */
  formOptions: anyObject[]
}

export interface ColumnType extends IColumnType {
  title: string // 标题
  dataIndex?: DataIndex // 列数据在数据项中对应的路径
  key?: string // Vue 需要的 key，如果已经设置了唯一的 dataIndex，可以忽略这个属性
  resizable?: boolean // 	是否可拖动调整宽度，此时 width 必须是 number 类型
  width: number // 列宽度
  ellipsis?: CellEllipsisType // 超过宽度将自动省略
  summary?: boolean // 是否开启列合计
  fixed?: FixedType // 对其方式
  summaryNums?: number // 合计保留位数
  isExcelNumber?: boolean // 自定义导出是否为数字格式
}

type tableScroll = {
  scrollToFirstRowOnChange?: boolean
  x?: string | number | true
  y?: string | number
}

export type IContentTable<T = any> = {
  /**表格name,排序必填 */
  name?: string
  /**表格配置别名 */
  nameAlias?: string
  /**拓展按钮插槽 */
  isOper?: boolean
  /**自定义空数据展示 */
  emptyText?: boolean
  /**选择框列宽 */
  columnWidth?: number
  /**额外的插槽 */
  isSlotOption?: string[]
  /**是否开启选择框 */
  rowSelection?: boolean
  /**自定义列表选择框标题 */
  rowSelectionColumnTitle?: string
  /**是否显示清空已选 */
  isResetSelected?: boolean
  /**是否显示表头 */
  showHeader?: boolean
  /**选择框类型 */
  rowSelectionType?: 'radio' | 'checkbox'
  /**	表格行的类名 */
  rowClassName?: string
  /**表格配置 */
  tableConfig?: boolean
  /**选择框固定 */
  fixed?: boolean
  /**控制展开图标是否固定，可选 true false left right */
  expandFixed?: boolean | 'left' | 'right'
  /**	通过点击行来展开子行 */
  expandRowByClick?: boolean
  /**表格loading */
  loading?: boolean
  /**开启选择框后,表格唯一key */
  rowKey?: string
  /**table高度自适应 */
  isCalcHeight?: boolean
  /**额外需要计算高度 */
  additionalHeight?: number
  /**选中key集合 */
  selectedRowKeys?: Array<string | number>
  /**禁用key集合 */
  disabledRowKeys?: Array<string | number>
  /** 展开的行，控制属性 */
  expandedRowKeys?: Array<string | number>
  /**展开行对应prop字段 */
  childrenColumnName?: string
  /**分页参数 */
  pagination?: TablePaginationConfig
  /**表格xy滚动 */
  scroll?: tableScroll
  /**表格列集合 */
  columns: ColumnType[]
  /**表格数据源集合 */
  dataSource: Array<T>
}
